package org.example;

import java.util.concurrent.atomic.AtomicInteger;

public class VolatileAtomicity {
    static volatile int grade = 0;
    //1.通过 atomic类解决
    static AtomicInteger atomicIntegerGrade = new AtomicInteger();
    public static void main(String[] args){
        for(int i = 1; i <=20; i++){
            Thread t = new Thread(()->{
                for(int j = 1; j<=1000; j++)
                {
                    //2.通过synchronized解决
//                    synchronized (VolatileAtomicity.class)
//                    {
//                        grade++;
//                    }
                    grade++;
                }
            });
            t.start();
        }

        while(Thread.activeCount() > 2){
            Thread.yield();
        }
        //输出不是100% 2000；
        // 原子性即为保证完整性，不可分割，即某个线程在做操作时，是不能被加塞或者分割的，需要整体完整，要么同时成功，要么同时失败。
        // 而现在出现的情况，是因为线程之间出现了覆盖。数据库的角度就是操作之间没隔离
        System.out.println("final value:" + grade);
    }
}
